package com.middlegroup.common.utils;

import com.middlegroup.common.exception.BusinessException;

import java.util.Map;
import java.util.Random;

/**
 *概率工具类
 * @author pc
 * @date 2019/1/11
 */
public class RandomUtils {

    /**
     * 概率选择
     *
     * @param keyChanceMap key为唯一标识，value为该标识的概率，是去掉%的整数数字
     * @return 被选中的key。未选中返回null
     */
    public static String chanceSelect(Map<String, Integer> keyChanceMap) {
        if (keyChanceMap == null || keyChanceMap.size() == 0){
            throw new BusinessException("参数非法!");
        }

        int sum = 0;
        for (int value : keyChanceMap.values()) {
            sum += value;
        }
        //如果权重为0 那么直接随机返回一个
        if(0==sum){
            throw new BusinessException("权重值非法!");
        }
        // 从1开始
        int rand = new Random().nextInt(sum) + 1;

        for (Map.Entry<String, Integer> entry : keyChanceMap.entrySet()) {
            rand -= entry.getValue().intValue();
            // 选中
            if (rand <= 0) {
                return entry.getKey();
            }
        }

        return null;
    }
}
